package com.jsmtr.rms.service;

import java.util.List;
import java.util.Map;

import com.jsmtr.rms.entity.*;

public interface IProjectService {

    /*招聘方案*/

    /**
     * 获得招聘计划
     * @return List<PlanInfo>
     */
    //List<PlanInfo> getplans() throws Exception;

    /**
     * 获得招聘计划岗位信息
     * @param pid 招聘计划ID
     * @param deptname 需求部门
     * @param jobname 需求岗位
     * @return Map
     */
    //Map<String,Object> selectPlanLists(int page,int perpage,String pid,String deptname,String jobname) throws Exception;

    /**
     * 获得招聘方案信息
     *
     * @param project 招聘方案实体
     * @return Map
     */
    Map<String, Object> getProjects(int page, int perpage, ProjectInfo project) throws Exception;

    Map<String, Object> getProjectSql(int page, int perpage, ProjectInfo project,int state, String key) throws Exception;

    /**
     * 获得招聘方案信息
     *
     * @param id 招聘方案ID
     * @return ProjectInfo
     */
    ProjectInfo getpProjectById(String id) throws Exception;

    /**
     * 获得招聘岗位信息
     *
     * @param pid 招聘方案ID
     * @return List<ProjectInfoJobs>
     */
    List<ProjectInfoJobs> getjobsbypid(String pid) throws Exception;

    /**
     * 根据流程Id查询流程信息
     * @param fid 流程Id
     * @return 流程信息
     * @throws Exception
     */
    ProjectInfoFlow getFolwById(String fid) throws Exception;

    /**
     * 获得招聘流程信息
     *
     * @param pid 招聘方案ID
     * @return List<ProjectInfoFlow>
     */
    List<ProjectInfoFlow> getflowbypid(String pid) throws Exception;

    /**
     * 获得招聘地区信息
     *
     * @param pid 招聘方案ID
     * @return List<ProjectInfoRegion>
     */
    List<ProjectInfoRegion> getRegionbypid(String pid) throws Exception;

    /**
     * 获得招聘流程信息
     *
     * @param pid 招聘方案ID
     * @param fid 招聘流程类型ID
     * @return List<ProjectInfoFlow>
     */
    List<ProjectInfoFlow> getAllFlowDept(String pid, int fid) throws Exception;


    /**
     * 获得招聘流程信息
     *
     * @param pid      招聘方案ID
     * @param deptcode 责任部门编码
     * @return List<ProjectInfoFlow>
     */
    List<ProjectInfoFlow> getThisFlowDept(String pid, String deptcode) throws Exception;

    /**
     * 获得招聘流程信息
     *
     * @param pid    招聘方案ID
     * @param forder 流程顺序
     * @return ProjectInfoFlow
     */
    ProjectInfoFlow getflow(String pid, int forder) throws Exception;

    /**
     * 获得招聘岗位信息
     * @param pid 招聘方案ID
     * @return List<ProjectInfoJob>
     */
    //List<ProjectInfoJob> getjobbypid(String pid) throws Exception;

    /**
     * 获得招聘方案信息
     *
     * @param type 招聘方式(-1表示全部方案)
     * @return List<ProjectInfo>
     */
    List<ProjectInfo> getProjectInfos(int type) throws Exception;

    /**
     * 获得招聘方案信息
     *
     * @param type 不包含的招聘方式
     * @return List<ProjectInfo>
     */
    List<ProjectInfo> getProjectByPlan(int type) throws Exception;

    /**
     * 分组查询所有招聘方案创建的年份
     * @author cyx
     * @date 2018/7/24 10:12
     * @return java.util.List
     */
    List getProjectInfoYears() throws Exception;

    /**    
     * 根据创建年份查询招聘方案
     * @author cyx  
     * @date 2018/7/24 10:09
     * @param year  
     * @return java.util.List<com.jsmtr.rms.entity.ProjectInfo>  
     */ 
    List<ProjectInfo> getProjectByYear(String year) throws Exception;

    /**
     * 获得中专校园招聘各阶段人数
     *
     * @param pid    招聘方案ID
     * @param fkey   阶段标识
     * @param fvalue 阶段标识值
     * @return int 人数
     */
    int getZZFlowUserCount(String pid, String fkey, String fvalue);

    /**
     * 获得高校校园招聘各阶段人数
     *
     * @param pid    招聘方案ID
     * @param fkey   阶段标识
     * @param fvalue 阶段标识值
     * @return int 人数
     */
    int getGXFlowUserCount(String pid, String fkey, String fvalue);

    /**
     * 获得用人需求包含的招聘方案
     *
     * @param did 用人需求ID
     * @return List<Object   [   ]>
     */
    List<Object[]> getProjectByDid(String did) throws Exception;

    /**
     * 通过招聘流程获得招聘方案
     *
     * @param fid 招聘流程ID
     * @return ProjectInfo
     */
    ProjectInfo getProjectInfo(String fid) throws Exception;

    /**
     * 获得招聘岗位
     *
     * @param id 招聘岗位ID
     * @return ProjectInfoJobs
     */
    ProjectInfoJobs getProjectInfoJob(String id) throws Exception;

    /**
     * 获得招聘岗位
     *
     * @param pid     招聘方案ID
     * @param jobname 招聘岗位名称
     * @return ProjectInfoJobs
     */
    ProjectInfoJobs getProjectInfoJob(String pid, String jobname) throws Exception;

    /**
     * 获得招聘岗位
     *
     * @param id      招聘岗位ID
     * @param pid     招聘方案ID
     * @param jobname 招聘岗位名称
     * @return ProjectInfoJobs
     */
    ProjectInfoJobs getProjectInfoJob(String id, String pid, String jobname) throws Exception;

    /**
     * 根据招聘发布的截止时间自动更新招聘方案状态为结束
     * @throws Exception
     */
    void endProjectByEndTime() throws Exception;

   /*
    * 根据招聘岗位名称或者模板名称模糊查询模板列表
    * @author cyx
    * @date 2018/9/3 14:01
    * @param jobName
 * @param tempName
    * @return com.jsmtr.rms.entity.ProjectInfoJobtemplate
    */
    List<ProjectInfoJobtemplate> findProjectInfoJobTemplateByLike(String state,String jobName,String tempName,String type) throws Exception;

    /**
     * 过去下一步流程
     * @param pid
     * @param deptcode
     * @param fid
     * @return
     * @throws Exception
     */
     ProjectInfoFlow getNextFlow(String pid, String deptcode, String fid) throws Exception;

}